package medium.array;

import java.util.Arrays;

/**
 * <a href="https://leetcode-cn.com/problems/largest-number">179. 最大数</a>
 * 给定一组非负整数 nums，重新排列每个数的顺序（每个数不可拆分）使之组成一个最大的整数。
 * 注意：输出结果可能非常大，所以你需要返回一个字符串而不是整数。
 * 示例 1：
 *   输入：nums = [10,2]
 *   输出："210"
 * 示例 2：
 *   输入：nums = [3,30,34,5,9]
 *   输出："9534330"
 * 示例 3：
 *   输入：nums = [1]
 *   输出："1"
 * 示例 4：
 *   输入：nums = [10]
 *   输出："10"
 * 提示：
 *   1 <= nums.length <= 100
 *   0 <= nums[i] <= 10^9
 * @author 刘学松
 * @date 2021-04-12 15:33
 */
public class 最大数 {
    public static void main(String[] args) {
        // todo
        int[] nums = {3, 30, 34, 5, 9};
        largestNumber(nums);
    }
    public static String largestNumber(int[] nums) {
        int length = nums.length;
        String[] array = new String[length];
        for (int i = 0; i < length; i++) {
            array[i] = String.valueOf(nums[i]);
        }

        Arrays.sort(array, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));

        StringBuilder sb = new StringBuilder();
        for (String str : array) {
            sb.append(str);
        }
        String result = sb.toString();
        while (result.charAt(0) == '0' && result.length() > 1) {
            result = result.substring(1);
        }
        return result;
    }
}
